#if !defined(ximera_graphics_ilight_hpp)
#define ximera_graphics_ilight_hpp

// -----------------------------------------------------------

#include <ximera/enum.hpp>
#include <ximera/graphics/attachable.hpp>
#include <ximera/math/color.hpp>
#include <ximera/common/sharedptr.hpp>

namespace ximera { namespace graphics
{
    XIMERA_ENUM(LightType)
        Point,
        Directional,
        Spot
    XIMERA_ENUM_END(LightType)

    class XIMERA_API ILight : public Attachable
    {
    public:
        ILight(String const& name = L"")
            : Attachable(name) {}

        virtual ~ILight();

        virtual math::Vector3 position() const = 0;
        virtual void position(math::Vector3 const& pos) = 0;

        virtual math::Vector3 direction() const = 0;
        virtual void direction(math::Vector3 const& dir) = 0;

        virtual LightType type() const = 0;
        virtual void type(LightType lightType) = 0;

        virtual math::Color diffuseColor() const = 0;
        virtual void diffuseColor(math::Color const& color) = 0;

        virtual math::Color specularColor() const = 0;
        virtual void specularColor(math::Color const& color) = 0;

        virtual bool enabled() const = 0;
        virtual void enabled(bool value) = 0;

        virtual bool castShadows() const = 0;
        virtual void castShadows(bool value) const = 0;
    };

    typedef SharedPtr<ILight> ILightPtr;
}}

// -----------------------------------------------------------

#endif
